/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.edu.upc.dew.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import pe.edu.upc.dew.model.Horario;
import pe.edu.upc.dew.model.Local;
import pe.edu.upc.dew.model.Servicio;
import pe.edu.upc.dew.util.JdbcUtils;

/**
 *
 * @author Pedro
 */
public class ServiciosDaoImpl implements ServiciosDao{

    @Override
    public List<Servicio> obtenerServicios(Servicio servicioConsulta, int codLocal) {
        List<Servicio> servicios = new ArrayList<Servicio>();
        try {
            Connection conn = JdbcUtils.getConnection();
            Statement st = conn.createStatement();
            Connection conn1 = JdbcUtils.getConnection();
            Statement st1 = conn1.createStatement();


            //obteniendo el ultimo padre registrado
            ResultSet rs = st.executeQuery("SELECT COD_SERVICIO,COSTO,DESCRIPCION,COD_LOCAL,"
                    + " COD_INSTRUCTOR,HORA_INI,HORA_FIN,LIMITE_MATRICULADOS  "
                    + "FROM GIMNASIO_DEW.SERVICIO where COD_SERVICIO = "+servicioConsulta.getCodigo()+" OR COD_LOCAL ="+codLocal+"; ");
            Servicio servicio;
            while(rs.next()){
                servicio = new Servicio();
                servicio.setCodigo(rs.getInt("COD_SERVICIO"));
                servicio.setCosto(rs.getDouble("COSTO"));
                servicio.setDescripcion(rs.getString("DESCRIPCION"));
                //servicio.setInstructor(new Instructor("Kina Malpartida"));
                servicio.setHoraInicio(rs.getString("HORA_INI").substring(0,5));
                //System.out.println("<<<<>>>servicio.setHoraInicio:"+servicio.getHoraInicio());
                servicio.setHoraFin(rs.getString("HORA_FIN").substring(0,5));
                servicio.setLimiteMatriculados(rs.getInt("LIMITE_MATRICULADOS"));

                ResultSet rsHorario = st1.executeQuery("SELECT COD_SERVICIO,CODIGO_DIA,DIA "
                    + " FROM GIMNASIO_DEW.HORARIO_SERVICIO where COD_SERVICIO = "+servicio.getCodigo()+"; ");
                ArrayList<Horario> horarios = new ArrayList<Horario>();
                Horario horario;
                while(rsHorario.next()){
                    horario = new Horario();
                    horario.setCodigo(rsHorario.getInt("CODIGO_DIA"));
                    horario.setDia(rsHorario.getString("DIA"));
                    horarios.add(horario);
                }
                servicio.setHorario(horarios);
                servicios.add(servicio);
            }
        } catch (SQLException ex) {
            Logger.getLogger(VentasDAOImpl.class.getName()).log(Level.SEVERE, null, ex);
        }catch (IllegalStateException iex){
            System.out.println("NO SE PUDO CONECTAR A LA BD:"+iex.getMessage());
        }
        return servicios;
    }

 @Override
    public int registrarServicio(Local local){
         int cod_servicio = 0;
        try {
            Connection conn = JdbcUtils.getConnection();
            Statement st = conn.createStatement();
            String sentencia ="insert into GIMNASIO_DEW.SERVICIO (COD_LOCAL,COD_INSTRUCTOR,DESCRIPCION,COSTO,LIMITE_MATRICULADOS, HORA_INI, HORA_FIN) "
                    + " values ("

                    +local.getCodigo()+","
                    +local.getServicio().get(0).getmInstructor().getCodigo()+",'"
                    +local.getServicio().get(0).getDescripcion()+"',"
                    +local.getServicio().get(0).getCosto()+","
                    +local.getServicio().get(0).getLimiteMatriculados()+",'"
                    +local.getServicio().get(0).getHoraInicio()+"','"
                    +local.getServicio().get(0).getHoraFin()
                    +"');";

            System.out.println("registrando servicio:"+sentencia);
            int resp = st.executeUpdate(sentencia);


            if (resp > 0) {
                //obteniendo el ultimo padre registrado
                ResultSet rs = st.executeQuery("SELECT COD_SERVICIO FROM GIMNASIO_DEW.SERVICIO where COD_LOCAL = "+local.getCodigo()+" and COD_INSTRUCTOR ="+local.getServicio().get(0).getmInstructor().getCodigo()+" order by COD_SERVICIO desc; ");
                if(rs.next()){
                Horario horario;
                 cod_servicio = rs.getInt("COD_SERVICIO");
                    for (Iterator<Horario> it = local.getServicio().get(0).getHorario().iterator(); it.hasNext();) {

                        horario = it.next();

                        String sentenciaDetalle = "insert into GIMNASIO_DEW.HORARIO_SERVICIO (COD_SERVICIO, CODIGO_DIA ,DIA ) "
                            + " values ("
                            +cod_servicio+","
                            +horario.getCodigo()+",'"
                            +horario.getDia()
                            +"')";
                        System.out.println("registrando det_venta:"+sentenciaDetalle);
                        st.executeUpdate(sentenciaDetalle);
                    }
                }
                return cod_servicio;
            }
        } catch (SQLException ex) {
            Logger.getLogger(VentasDAOImpl.class.getName()).log(Level.SEVERE, null, ex);
        }catch (IllegalStateException iex){
            System.out.println("NO SE PUDO CONECTAR A LA BD:"+iex.getMessage());
        }
        return cod_servicio;
    }

    

}
